"""
查找最大或最小的 N 个元素

问题：
    怎样从一个集合中获得最大或者最小的 N 个元素列表？
解决方案：
    heapq 模块有两个函数：nlargest() 和 nsmallest() 可以完美解决这个问题。
"""

from heapq import nlargest, nsmallest


def use_heapq():
    num_list = [1, 3, 4, 9, -1, 0, 18, 28, 99]
    # 获取最大的3个数
    large = nlargest(3, num_list)
    print(large)

    # 获取最小的3个数
    small = nsmallest(3, num_list)
    print(small)

    user_list = [
        {"name": "Kevin", "age": 18},
        {"name": "KK", "age": 16},
        {"name": "Zhao", "age": 28},
    ]
    # 获取年龄最大的人姓名
    user_name = nlargest(1, user_list, key=lambda user: user['age'])[0]['name']
    print(user_name)

    # 获取年龄最小的人姓名
    user_name = nsmallest(1, user_list, key=lambda user: user['age'])[0]['name']
    print(user_name)

    # 输出结果：
    """
    [99, 28, 18]
    [-1, 0, 1]
    Zhao
    KK
    """


if __name__ == '__main__':
    use_heapq()
